#include <semaphore.h>
#include <pthread.h>

typedef struct valoresCHS
{
	int cabezal;
	int cilindros;
	int sectores;
}chs;


typedef struct ClienteConocido {
	int socketCliente;
	struct ClienteConocido * Sgt;
	struct ClienteConocido * Ant;
}cliente ;



typedef struct ListaIDdescriptors 
{
	char sDescriptorID_delPedido[20];
	char discoAsignado[20];
	char sSocketPorElCualResponder[20]; 
	int socketPorElCualResponder; 
	int operacion;		
	unsigned int numeroSector;
	int estado;
	char data[512];
	int owner; /*RAID o numero de disco conectado*/
		
	struct ListaIDdescriptors * Sgt;
	struct ListaIDdescriptors * Ant;
	
} __attribute__ ((packed)) pedido;



typedef struct DiscoConocido
{
	char sNombre[25];
	int Estado;
	int sectores;
	int pendings;

	int* iSocketArrayParaHDA;				
	int* iSocketHDAParaArray;				
	int iSocketHDAParaDA;	
	int iSocketSINCRO;		

	pthread_mutex_t mutex;
	
	pedido * listaPedidos;
	pedido * listaPedidos_Ult;

	struct DiscoConocido * Sgt;
	struct DiscoConocido * Ant;

}disco;



typedef struct Control
{
	char sDescriptorID_delPedido[20];
	int discosAEspejar;
	
	struct Control * Sgt;
	struct Control * Ant;

}t_control;


typedef struct PedidosPendientes
{
	int sector;
	char disco[20];	
	
}pedidosPendientes;


pthread_mutex_t mutex;  
pthread_mutex_t mutex2;
pthread_mutex_t mutex3;   


/*VARIABLES A ELIMINAR*/
t_control* colaControl;
t_control* colaControl_Ult;
pedido * colaGlobal;
pedido * colaGlobal_Ult;
struct DiscoConocido * ListaDiscos;
struct DiscoConocido * ListaDiscos_Ult;
cliente * ListaClientes;
cliente * ListaClientes_Ult;
int iCantidadDeDAConectados;
int Estado;
int SubEstado;
/*int ArrayCompleto;*/

